package com.fanshuai2.niuke.strings;

import java.util.*;

/**
 * 描述
 * 定义一个单词的“兄弟单词”为：交换该单词字母顺序（注：可以交换任意次），而不添加、删除、修改原有的字母就能生成的单词。
 * 兄弟单词要求和原来的单词不同。例如： ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。
 * 现在给定你 n 个单词，另外再给你一个单词 x ，让你寻找 x 的兄弟单词里，按字典序排列后的第 k 个单词是什么？
 * 注意：字典中可能有重复单词。
 *
 * 数据范围：
 * 1
 * ≤
 * �
 * ≤
 * 1000
 *
 * 1≤n≤1000 ，输入的字符串长度满足
 * 1
 * ≤
 * �
 * �
 * �
 * (
 * �
 * �
 * �
 * )
 * ≤
 * 10
 *
 * 1≤len(str)≤10  ，
 * 1
 * ≤
 * �
 * <
 * �
 *
 * 1≤k<n
 * 输入描述：
 * 输入只有一行。 先输入字典中单词的个数n，再输入n个单词作为字典单词。 然后输入一个单词x 最后后输入一个整数k
 * 输出描述：
 * 第一行输出查找到x的兄弟单词的个数m 第二行输出查找到的按照字典顺序排序后的第k个兄弟单词，没有符合第k个的话则不用输出。
 *
 * 示例1
 * 输入：
 * 3 abc bca cab abc 1
 * 复制
 * 输出：
 * 2
 * bca
 * 复制
 * 示例2
 * 输入：
 * 6 cab ad abcd cba abc bca abc 1
 * 复制
 * 输出：
 * 3
 * bca
 * 复制
 * 说明：
 * abc的兄弟单词有cab cba bca，所以输出3
 * 经字典序排列后，变为bca cab cba，所以第1个字典序兄弟单词为bca
 */

public class BroWords {
    static void sort(char[] arr) {
        int len = arr.length;
        for (int i = 0; i < len - 1; i++) {
            for (int j = 0; j < len - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    char ch = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = ch;
                }
            }
        }
    }
    static boolean isBro(String s1, String s2) {
        if (s1.length() != s2.length()) {
            return false;
        }
        if (Objects.equals(s1, s2)) {
            return false;
        }
        char[] arr1 = s1.toCharArray();
        char[] arr2 = s2.toCharArray();
        int len = arr1.length;

        sort(arr1);
        sort(arr2);
        boolean b = true;
        for (int i = 0; i < len; i++) {
            if (arr1[i] != arr2[i]) {
                b = false;
            }
        }

        return b;
    }

    static List<String> getBro(String s, List<String> words) {
        if (words.size() == 0) {
            return new ArrayList<>();
        }
        List<String> bros = new ArrayList<>();
        for (String word: words) {
            if (isBro(s, word)) {
                bros.add(word);
            }
        }
        return bros;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        while (in.hasNext()) {
            int n = in.nextInt();
            List<String> words = new ArrayList<>();
            for (int i = 0; i < n; i++) {
                String word = in.next();
                words.add(word);
            }
            String s = in.next();
            int k = in.nextInt();

            List<String> bros = getBro(s, words);
            System.out.println(bros.size());

            bros.sort(new Comparator<String>(){
                public int compare(String a, String b) {
                    return a.compareTo(b);
                }
            } );
            if (bros.size() > 0 && k <= bros.size()) {
                System.out.println(bros.get(k - 1));
            }
        }
    }
}
